package com.jagochan.module.rbac.sys_menu.domain.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_EMPTY) // null、集合数组没有内容、空字符串等不会被序列化
public class TreeVueRouterVO {

    /**
     * 路由路径
     */
    private String path;

    /**
     * 对应的是数据库中的url字段（组件路径）
     */
    private String component;

    /**
     * 路由名称
     */
    private String name;

    /**
     * 重定向地址
     */
    private String redirect;

    /**
     * 元数据信息
     */
    private Meta meta;

    /**
     * 子路由
     */
    private List<TreeVueRouterVO> children;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Meta implements Cloneable {
        /**
         * 菜单名称
         */
        String title;

        /**
         * 图标
         */
        String icon;

        /**
         * 菜单code列表
         */
        List<String> roles;

        @Override
        public Meta clone() {
            try {
                return (Meta) super.clone();
            } catch (CloneNotSupportedException e) {
                throw new AssertionError();
            }
        }
    }

}
